<?php
/**
 * etframework
 * ユーザークラス
 * 
 * @package etframework
 */
class User
{
    protected
        $id,
        $level;

    function __construct()
    {
        $this->checkLogin();
    }


    function __get($prop)
    {
        if (!property_exists($this,$prop)) {
            throw new InvalidArgumentException($prop.'は存在しません');
        }
        
        return $this->$prop;
    }

    function __set($prop, $val)
    {
        if (!property_exists($this,$prop)) {
            throw new InvalidArgumentException($prop.'はセットできません');
        }
        
        $this->$prop = $val;
    }

    /**
     * ログイン確認
     * @return boolean ログイン状態
     */
    private function checkLogin()
    {
        @session_start();
    
        //セッションに記録されていればtrue
        if (@$_SESSION[SESSION_LOGIN_NAME]) {
            $this->level = @$_SESSION[SESSION_LOGIN_NAME]['level'];
            $this->id    = @$_SESSION[SESSION_LOGIN_NAME]['member_id'];
            return;
        }
        
        //クッキーに記録されているならログイン状態にする
        if (COOKIE_LOGIN && @$_COOKIE[COOKIE_LOGIN_NAME]) {
            $list = explode('<>', $_COOKIE[COOKIE_LOGIN_NAME]);
            $column = unserialize(COOKIE_LOGIN_COLUMN);
            $data = array();
            foreach ($column as $key => $val) {
                $data[$val] = htmlspecialchars(@$list[$key]);
            }
            
            User::loginAccount($data, 1);
    
            //正常にログイン出来たらtrue
            $this->level = @$_SESSION[SESSION_LOGIN_NAME]['level'];
            $this->id    = @$_SESSION[SESSION_LOGIN_NAME]['member_id'];
        }
    }
    
    /**
     * ログイン処理
     */
    static function loginAccount($data, $isArray = false)
    {
        //一旦ログアウトする
        //static::logoutAccount();
        
        $cookie = "";
        
        //セッション
        $array = unserialize(COOKIE_LOGIN_COLUMN);
        $errorcount = 0;
        
        foreach ($array as $val) {
            $value = ($isArray) ? $data[$val] : $data->$val;
            if (!isset($value)) $errorcount++;
            $_SESSION[SESSION_LOGIN_NAME][$val] = $value;
            $cookie .= $value."<>";
        }
        
        //データに何かしら不備があればログインさせない
        if ($errorcount) {
            static::logoutAccount();
            return;
        }
        
        //クッキー
        if (COOKIE_LOGIN) setcookie(COOKIE_LOGIN_NAME, $cookie, time() + COOKIE_LOGIN_DAYS * 24 * 3600, '/');
    }
    
    /**
     * ログアウト処理
     * @param url string ログアウト後にジャンプするURL
     */
    static function logoutAccount($url = 0)
    {
        //セッション
        @session_start();
        unset($_SESSION[SESSION_LOGIN_NAME]);
        
        //クッキー
        if (COOKIE_LOGIN) setcookie(COOKIE_LOGIN_NAME, null, -1, '/');
    }


}